<?php

class Gb_Controller_Plugin_UserAuth extends Zend_Controller_Plugin_Abstract {

	/**
	 * До диспетчеризации аутентифицируем и авторизуем пользователя
	 *
	 * @param Zend_Controller_Request_Abstract $request
	 */
	public function preDispatch(Zend_Controller_Request_Abstract $request) {
		// Если процес диспетчеризации не закончен успешно, выходим из плагина
		if (!$request->isDispatched()) return;
		// Инстанцируем Zend_Auth
		$auth = Zend_Auth::getInstance();

		// Проверяем не идентифицирован ли пользователь
		if (!$auth->hasIdentity()) {
			$dbAdapter = Zend_Registry::get('db');
			$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
			// получаем настройки дефолтного пользователя
			$userConfig = new Zend_Config_Ini(APPLICATION_PATH . DIRECTORY_SEPARATOR . 'configs/userDefault.ini', APPLICATION_ENV);
			$authAdapter->setTableName('users')
					->setIdentityColumn('login')
					->setCredentialColumn('password')
					->setIdentity($userConfig->get('login'))
					->setCredential(md5($userConfig->get('password')));
			$result = $auth->authenticate($authAdapter);
			if ($result->isValid()) {
				$data = $authAdapter->getResultRowObject(null, 'password');
				$auth->getStorage()->write($data);
			} else {
				throw new Zend_Controller_Exception('The user is not authenticated');
			}
		}
	}

}